﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace конфигуратор
{
    public class ДинПоле
    {
        private object _значение;
        private bool установленВручную;
        private bool вычислен;
        private bool ужеУстановлен;
        public Func<object,Результат> Вычислить;
        public object Получить()
        {
            if ( ужеУстановлен ) return _значение;

           var рез = Вычислить(this);
           if( рез.Успешно  )
           { 
               _значение = рез.Объект;

               ужеУстановлен = true;
               вычислен = true;
               установленВручную = false;
           }
            return _значение;
        }
        public void Установить( object значение)
        {
            _значение = значение;

            установленВручную = true;
            вычислен = false;
        }
        public void СброситьУстановку ()
        {
            ужеУстановлен = false;
            _значение = null;
        }
    }
}
